iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0

Functional Programing

我自己並不覺得 FP 跟 OOP 有優劣之分,只要邏輯簡單易懂,都是很好的做法 。

我在學習 TDD 開發的過程中,偶然間接觸到 FP ,由於以前都是偏物件導向的方式去寫,所以就停下來稍微研究了一下 FP ,那這邊會稍微介紹一下 FP 的做法


Functional Programing 觀念

Pure Function

y = f(x)

這是一個我們熟悉的方程式,那 FP 也是以這個為基礎,一個 input 只會有一個 output,且不會有side Effect ,而且不會有外部影響 ,我們就稱之為 Pure Function,舉例來說

y = f(x + 5)

const pureFunctionAddFive = (x) => {
	return x + 5
}

pureFunctionAddFive(5); // 10
pureFunctionAddFive(10); // 15

Side Effects

什麼是Side Effects ?

如果有使用到 function scope 以外的狀態,那就是有可能產生 side effects
(常用到的 console 、 new Date()、或是變動原本的數值都算是 side Effect )

舉例來說,這邊有使用到外部的變數,他就算是side effect ,也就代表他不是 pure function

let value = 5 ;

function addingValue (n : number) {
	return n + value;
}

Curry

首先我們先看一題前端面試題,這題應該蠻常看到的,我們要怎麼做出這個 sum function 呢

let a = 1 ;
let b = 2 ;

sum(a)(b) // 3
//answer

function sum(a){
	return function(b){
		return a + b
	};
}

通過 currying 的方式你可以這樣用

const sumByOne = sum(1)

sumByOne(2); //3
sumByOne(5); //6

通過 curry 的方式可以讓你更容易寫出 pure function ,也會讓程式變得更容易測試


上一篇
Day 16 - 3A Pattern & TDD part 1
下一篇
Day 18 - 那些可以試著用在專案的 Functional Programing 觀念 part 1
系列文
React Clean Code And Unit Tests - 利用測試寫出人類看得懂的React程式30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言